<?php
/**
 * ECSHOP 微信扫码支付插件
 * $Author: 凡人 QQ:644157559 $
 */

if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

@$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/wxpay.php';

if (file_exists($payment_lang))
{
    global $_LANG;
    include_once($payment_lang);
}

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php');

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'wxpay_desc';

    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '1';

    /* 作者 */
    $modules[$i]['author']  = 'SUNNY-TECH TEAM';

    /* 网址 */
    $modules[$i]['website'] = 'http://www.sunny-tech.com';

    /* 版本号 */
    $modules[$i]['version'] = '0.0.1';

	/* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => 'wxpay_app_id', 'type' => 'text', 'value' => ''),
        array('name' => 'wxpay_app_secret', 'type' => 'text', 'value' => ''),
        array('name' => 'wxpay_mchid', 'type' => 'text', 'value' => ''),
        array('name' => 'wxpay_key', 'type' => 'text', 'value' => ''),
    );

    return;
}

include_once(ROOT_PATH . "wxpay/native/WxPay.NativePay.php");
require_once ROOT_PATH . "wxpay/log.php";
//初始化日志
/**
 * 类
 */
class wxpay {
	
    /**
     * 生成支付代码
     * @param   array   $order      订单信息
     * @param   array   $payment    支付方式信息
     */
    function get_code($order, $payment) {
        
        $notify = new NativePay();
        /**
        * 流程：
        * 1、调用统一下单，取得code_url，生成二维码
        * 2、用户扫描二维码，进行支付
        * 3、支付完成之后，微信服务器会通知支付成功
        * 4、在支付成功通知中需要查单确认是否真正支付成功（见：notify.php）
        */
        WxPayConfig::setValue('appid', $payment['wxpay_app_id']);
        WxPayConfig::setValue('mchid', $payment['wxpay_mchid']);
        WxPayConfig::setValue('key', $payment['wxpay_key']);
        $input = new WxPayUnifiedOrder();
        $input->SetBody($order['order_sn']);
        $fee = intval($order['order_amount']  * 100);
//        $input->SetDetail('商品详情');
//       $input->SetAttach("test");
        $input->SetOut_trade_no($order['order_sn'] . "_" . $order['log_id'] . "_" . $fee);
        $input->SetTotal_fee(intval($order['order_amount']  * 100));//付款金额单位：分
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
//       $input->SetGoods_tag("test");
        $input->SetNotify_url($GLOBALS['ecs']->url() . "wxpay/notify.php");
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id($order['order_id']);
        $result = $notify->GetPayUrl($input);
        if ($result['result_code'] == 'SUCCESS' && $result['return_code'] == 'SUCCESS') {
            $pay_url = urlencode($result["code_url"]);
            $pay_qrcode = '<div style="text-align:center">'
                    . '<div style="margin-bottom:10px;"><img src="/wxpay/logo.png" width="150"></div>'
                    . '<div style="margin-bottom:10px;"><img id="fr_wxpay" data-id="'.$order['log_id'].'" src="/wxpay/qrcode.php?data='.$pay_url.'" width="150"></div>'
                    . '<div><img src="/wxpay/note.png" width="150"></div>'
                    . '</div>'
                    . '<script src="/wxpay/wxpay.js"></script>';
            return $pay_qrcode;
        }else{
            return "err_code : " . $result['err_code'] . "； err_code_des：" . $result['err_code_des'];
        }
    }
	
    /**
    * 接受通知处理订单。
    * @param undefined $log_id
    * 20141125
    */
    function respond($data) { 
        $logHandler= new CLogFileHandler(ROOT_PATH . "wxpay/logs/".date('Y-m-d').'.log');
        $log = Log::Init($logHandler, 15);
        
        list($order_sn, $log_id, $fee) = explode('_', $data['out_trade_no']);
        /* 检查支付的金额是否相符 */
        $total_fee = ($data['total_fee'] / 100);
        if ( !check_money( $log_id, $total_fee ) ) {
            Log::DEBUG("订单金额不符");
            return false;
        }
        if ($data['result_code'] == 'SUCCESS' && $data['return_code'] == 'SUCCESS') {
            Log::DEBUG("SUCCESS:" . $data['out_trade_no']);
            /* 改变订单状态 */
            order_paid($log_id);
            return true;
        }else{
            if ($data["return_code"] == "FAIL") {
                //此处应该更新一下订单状态，商户自行增删操作
                Log::DEBUG("【通信出错】:{$data['return_msg']}");
            }elseif($data["result_code"] == "FAIL"){
                //此处应该更新一下订单状态，商户自行增删操作
                Log::DEBUG("【业务出错】:{$data['err_code']}--{$data['err_code_des']}");
            }
            return false;
        } 
    }
	
}


?>